home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_11_12 / engbert / usage.c < prev   
Encoding:
C/C++ Source or Header  |  1993-05-11  |  1.9 KB  |  78 lines

  1. /*                         USAGE.C
  2. **
  3. */
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "config.h"
  7.  
  8. /****************** usage () ******************/
  9.  
  10. usage() {
  11. #ifdef COMPRESS
  12.     fprintf(stderr,"\nusage: "PACK_PROGRAM_NAME
  13.       " [-f] [-oPATH] <filename> [filename...]\n");
  14. #else
  15.     fprintf(stderr,"\nusage: "UNPACK_PROGRAM_NAME
  16.       " [-f] [-oPATH] <filename> [filename...]\n");
  17. #endif
  18.     fprintf(stderr,"       -f for: force"
  19.      " overwrite of existing file\n");
  20.     fprintf(stderr,"       -o followed by"
  21.      " name of output directory\n");
  22.     fprintf(stderr,
  23.      "\nSpecify any number of compressed files\n");
  24.     fprintf(stderr,
  25.       "Arguments may appear in any order.\n");
  26. }
  27.  
  28.  
  29. /*********** get_arguments() *********************/
  30.  
  31. char **get_arguments(int argc, char **argv,
  32.      int *overwrite, char *output_directory) {
  33.  
  34. char **filelist, **fileptr;
  35.  
  36.     /* We build our own list of pointers to
  37.     ** filenames on command line. */
  38.  
  39.     filelist = fileptr =
  40.      (char **)(malloc(argc * sizeof(*argv)));
  41.     *filelist = NULL;
  42.  
  43.      /* Process flags. All flags are optional.
  44.      * if a string is left, must be input filename. */
  45.  
  46.     for (argc--, argv++; argc > 0; argc--, argv++) {
  47.         if (**argv == '-') {    /* A flag argument */
  48.             while (*++(*argv)) {
  49.                 /* Process all flags in this arg */
  50.                 switch (**argv) {
  51.                     case 'f': /*force*/
  52.                     case 'F':
  53.                         *overwrite = 1;
  54.                         argv++;
  55.                         break;
  56.                     case 'o':  /*output_directory*/
  57.                     case 'O':
  58.                         strcpy(output_directory,
  59.                           (*argv+1));
  60.                         argv++;
  61.                         break;
  62.                     default:
  63.                         fprintf(stderr,
  64.                          "Unknown flag: '%c'; ", **argv);
  65.                         usage();
  66.                         exit(1);
  67.                 } /* switch*/
  68.             }
  69.         }
  70.         else {          /* Input file name */
  71.             *fileptr++ = *argv;
  72.             *fileptr = NULL;
  73.         }
  74.         continue;
  75.     }
  76.     return filelist;
  77. }
  78.